import request from "@/utils/request";

const PROJECT_BASE_URL = "/bus/project";

class ProjectAPI {
  /** 项目暂存接口*/
  static save(data: ProjectData) {
    return request({
      url: `${PROJECT_BASE_URL}/save`,
      method: "post",
      data: data,
    });
  }

  /** 项目发起接口*/
  static apply(data: ProjectData) {
    return request({
      url: `${PROJECT_BASE_URL}/apply`,
      method: "post",
      data: data,
    });
  }

  /**
   * 获取项目分页列表
   *
   * @param queryParams 查询参数
   */
  static getPage(queryParams: ProjectPageQuery) {
    return request<any, PageResult<ProjectPageVO[]>>({
      url: `${PROJECT_BASE_URL}/getProjectPage`,
      method: "get",
      params: queryParams,
    });
  }

  /**
   * 根据id获取项目信息
   *
   * @param id 项目ID
   */
  static getById(id: number) {
    return request<any, ProjectPageVO>({
      url: `${PROJECT_BASE_URL}/getById?id=${id}`,
      method: "get",
    });
  }

  /**
   * 删除项目
   *
   * @param id 项目ID
   */
  static deleteById(id: number) {
    return request({
      url: `${PROJECT_BASE_URL}/delete?id=${id}`,
      method: "post",
    });
  }

  /**
   * 根据流程实例id获取项目信息
   *
   * @param workId 流程实例ID
   */
  static getByWorkId(workId: number) {
    return request<any, ProjectData>({
      url: `${PROJECT_BASE_URL}/getByWorkId?workId=${workId}`,
      method: "get",
    });
  }

  /** 项目审批接口*/
  static examine(data: ExamineData) {
    return request({
      url: `${PROJECT_BASE_URL}/examine`,
      method: "post",
      data: data,
    });
  }

  /**
   * 获取流程节点
   *
   * @param flowId 流程id
   */
  static getFlowNodes() {
    return request<any>({
      url: `${PROJECT_BASE_URL}/getFlowNodes`,
      method: "get",
    });
  }
}

export default ProjectAPI;

/** 保存项目请求参数 */
export interface ProjectData {
  /** 主键id */
  id?: number;
  /** 项目编码 */
  projectCode?: string;
  /** 项目名称 */
  projectName?: string;
  /** 项目经理 */
  projectManager?: number;
  /** 产品经理 */
  productManager?: number;
  /** 开发部门 */
  departmentId?: number;
  /** 实际启动时间 */
  beginDate?: string;
  /** 实际结束时间 */
  endDate?: string;
  /** 计划结束时间 */
  planEndDate?: string;
  /** 项目类型 */
  projectType?: number;
  /** 背景 */
  projectBackground?: string;
  /** 目标 */
  projectTarget?: string;
  /** 风险 */
  projectRisk?: string;
  /** 附件 */
  attachments?: string;
  /** 提出人id */
  creator?: number;
  /** 里程碑 */
  milestones?: [];
  /** 项目组成员*/
  members?: [];
  /** 关联需求*/
  requirments?: [];
}

/** 审批请求参数 */
export interface ExamineData {
  /** 主键id */
  id?: number;
  /** 1-同意，0-驳回 */
  examineStatus?: number;
  /** 意见明细 */
  content?: string;
  /** 工作实例id */
  workId?: number;
  /** 工作进程id */
  processId?: number;
}

/**
 * 项目分页查询对象
 */
 export interface ProjectPageQuery extends PageQuery {
  /** 搜索关键字 */
  projectName?: string;
}

/** 项目分页对象 */
export interface ProjectPageVO {
  /** 主键id */
  id?: number;
  /** 项目编码 */
  projectCode?: string;
  /** 项目名称 */
  projectName?: string;
  /** 项目经理id */
  projectManager?: number;
  /** 产品经理id */
  productManager?: number;
  /** 开发部门 */
  departmentId?: number;
  /** 实际启动时间 */
  beginDate?: string;
  /** 实际结束时间 */
  endDate?: string;
  /** 计划结束时间 */
  planEndDate?: string;
  /** 项目类型 */
  projectType?: number;
  /** 背景 */
  projectBackground?: string;
  /** 目标 */
  projectTarget?: string;
  /** 风险 */
  projectRisk?: string;
  /** 附件 */
  attachments?: string;
  /** 发起人id */
  creator?: number;
  /** 发起人姓名 */
  userName?: string;
  /** 发起部门 */
  departmentName?: string;
  /** 项目经理姓名 */
  projectManagerName?: string;
  /** 产品经理姓名 */
  productManagerName?: string;
  /** 当前阶段 */
  milestoneName?: string;
  /** 阶段里程碑 */
  milestoneDate?: string;
}
